<?php
/**
 * 用户自定义函数（支持热重载）
 * Here is your custom functions.
 */

use plugin\admin\app\model\Base;
use support\Model;

is_file(base_path('.env')) || copy(base_path('.env.example'), base_path('.env'));

if (is_file(runtime_path('Bencode.php'))) {
    require_once runtime_path('Bencode.php');
}

/**
 * 开发专用函数，打印变量exit
 * @param mixed $v
 * @param bool $format
 * @return void
 */
function var_dump_exit(mixed $v, bool $format = true): void
{
    if ($format) {
        var_dump($v);
    } else {
        print_r($v);
    }
    exit;
}

/**
 * 检查只读字段，禁止变更
 * @param array $readonly
 * @param Model|Base $model
 * @return void
 */
function verify_readonly_field(array $readonly, Model|Base $model): void
{
    $dirty = $model->getDirty();
    foreach ($readonly as $field) {
        if (array_key_exists($field, $dirty)) {
            throw new RuntimeException("禁止修改只读字段{$field}");
        }
    }
}

/**
 * 获取当前版本commit
 * @param string $branch
 * @param bool $short
 * @return string
 */
function get_current_git_commit(string $branch = 'master', bool $short = true): string
{
    if ($hash = file_get_contents(sprintf(base_path() . '/.git/refs/heads/%s', $branch))) {
        $hash = trim($hash);

        return $short ? substr($hash, 0, 7) : $hash;
    }
    return '';
}

/**
 * 获取当前版本时间
 * @param string $branch
 * @param string $format
 * @return string
 */
function get_current_git_filemtime(string $branch = 'master', string $format = 'Y-m-d H:i:s'): string
{
    if ($time = filemtime(sprintf(base_path() . '/.git/refs/heads/%s', $branch))) {
        return date($format, $time);
    }
    return '';
}
